package colleaction.efficiency;

import java.util.ArrayList;
import java.util.List;

public class ListIterateRemove {

	// 关于遍历删除
	// 错误：1.直接遍历删除,抛异常 2.遍历继续条件为 list.size(),产生bug 3. iterator 遍历却用 list.remove
	// 正确: 1.iterator遍历删除 2.len-- i-- 3. 反向遍历删除 4.不用len，条件list.size(), i--

	public static void main(String[] args) {
		List<String> list = new ArrayList<String>();

		list.add("a");
		list.add("b1");
		list.add("c");
		list.add("b2");
		list.add("b3");
		list.add("b4");
		list.add("c");

		// 在循环中条件写成 i<list.size() , 的确是每次循环都会调用一次 size()方法的，你还真以为编译器会帮你优化么

		for (int i = 0/* , len = list.size() */; i < list.size()/* len */; i++) {
			if (list.get(i).contains("b")) {
				list.remove(i);
				// len--;
				i--;
			}
		}
		for (String b : list) {
			System.out.println(b);
		}
	}
}
